home *** CD-ROM | disk | FTP | other *** search
/ Amoszine 9 / Amoszine 9 (Disk 3 of 3).adf / AJC_Source.lha / AJC-COSv1.AMOS / AJC-COSv1.amosSourceCode next >
AMOS Source Code  |  1992-09-02  |  22KB  |  1,182 lines

  1. '
  2. ' Cos v1.0 
  3. '
  4. ' By Andrew Campbell 1995
  5. '
  6. ' This is an interesting pattern generator-type program, coded in
  7. ' about three evenings. It uses various COS/SIN/TAN routines to draw 
  8. ' complex patterns under user (vague) control - some of the techniques 
  9. ' have been stolen and adapted from the AMOS PD CD collection. 
  10. '
  11. ' Control is via the mouse. Every pattern option can be TESTED or GENERATED
  12. ' in either COS, TAN, SIN or RND. Please COMPILE the program for maximum 
  13. ' speed and remember this is the first, experimental version. Do NOT leave 
  14. ' one pattern drawing forever whilst you go out with your mates and get
  15. ' rat arsed: your computer will undoubtedly crash. STOP each function with 
  16. ' the mouse when you've got a nice suitable pattern. 
  17. '
  18. ' Toying around is the name of the game. Or rather, program. Ahem. 
  19. ' Enjoy it - AJC 
  20. '
  21.  
  22. ' Note from Andy Gibson.  This requires the JD Extension.  Please help 
  23. ' me out guys when sending in source that uses Extensions by telling me
  24. ' which ones your code uses!  :^)  Cheers for now .... 
  25.  
  26. Dim YTOPLINE(640),YBASELINE(640)
  27. Dim X(100),Y(100)
  28. Global CINV,CSCH,_MENUVISIBLE,_SELECTED,_FUNCTION,_TEST,C,X1,Y1
  29. Global YTOPLINE(),YBASELINE()
  30. Global X(),Y(),I
  31.  
  32.  
  33. CINV=1
  34. CSCH=3
  35. _MENUVISIBLE=1
  36. _SELECTED=1
  37. _FUNCTION=1
  38. _TEST=0
  39. _SSPEED=9
  40.  
  41. _SETUP
  42. Screen 1
  43. Reserve Zone(30)
  44. _SETZONES
  45.  
  46. RES:
  47.  
  48. Do 
  49.    
  50.    Screen 1
  51.    X=X Screen(X Mouse)
  52.    Y=Y Screen(X Mouse)
  53.    MZ=Mouse Zone
  54.    
  55.    If Mouse Key=2 and _MENUVISIBLE=1
  56.       Screen Hide 1
  57.       Wait 10
  58.       _MENUVISIBLE=0
  59.       Goto NB
  60.    End If 
  61.    
  62.    If Mouse Key=2 and _MENUVISIBLE=0
  63.       Screen Show 1
  64.       Wait 10
  65.       _MENUVISIBLE=1
  66.    End If 
  67.    
  68.    NB:
  69.    
  70.    If Mouse Key=1 and MZ>0
  71.       
  72.       If MZ>0 and MZ<15 and _FUNCTION<>MZ
  73.          _SETFUNCTION[1]
  74.          _FUNCTION=MZ
  75.          _SETFUNCTION[0]
  76.       End If 
  77.       
  78.       If MZ>21 and MZ<26 and _SELECTED<>MZ-21
  79.          _SETSELECTED[1]
  80.          _SELECTED=MZ-21
  81.          _SETSELECTED[0]
  82.       End If 
  83.       
  84.       If MZ=15
  85.          Screen Copy 4 To 0
  86.       End If 
  87.  
  88.       If MZ=16
  89.         On Error Goto ER
  90.         F$=Fsel$("","","Load An IFF Picture")
  91.         If F$<>""
  92.            Screen 0
  93.            Load Iff F$
  94.         End If 
  95.         Screen To Front 1
  96.       End If 
  97.  
  98.       If MZ=17
  99.         On Error Goto ER
  100.         F$=Fsel$("","","Save Image As IFF")
  101.         If F$<>""
  102.            Screen 0
  103.            Save Iff F$
  104.         End If 
  105.         Screen To Front 1
  106.       End If 
  107.       
  108.       If MZ=18
  109.          Add CSCH,1
  110.          If CSCH>9 : CSCH=1 : End If 
  111.          Screen 0
  112.          _SETPALETTE
  113.          Wait 10
  114.       End If 
  115.       
  116.       If MZ=19
  117.          Add CINV,1
  118.          If CINV>1 : CINV=0 : End If 
  119.          Screen 0
  120.          _SETPALETTE
  121.          Wait 10
  122.       End If 
  123.       
  124.       If MZ=20
  125.          Screen Hide 1
  126.          Change Mouse 3
  127.          Wait 20
  128.          _TEST=1
  129.          _GENERATE
  130.          _TEST=0
  131.          Change Mouse 1
  132.          Screen Show 1
  133.          View 
  134.          Wait 10
  135.       End If 
  136.       
  137.       If MZ=21
  138.          Screen Copy 0 To 4
  139.          Screen 0
  140.          Cls 15
  141.          Screen 1
  142.       End If 
  143.       
  144.       If MZ=26
  145.          Screen Hide 1
  146.          Change Mouse 3
  147.          Wait 20
  148.          _GENERATE
  149.          Change Mouse 1
  150.          Screen Show 1
  151.          View 
  152.          Wait 10
  153.       End If 
  154.       
  155.       If MZ=27
  156.          Dec _SSPEED
  157.          If _SSPEED<1 : _SSPEED=1 : End If 
  158.          Screen 0
  159.          Shift Up _SSPEED,1,15,1
  160.          Wait 10
  161.       End If 
  162.       
  163.       If MZ=28
  164.          _SSPEED=9
  165.          Screen 0
  166.          Shift Off 
  167.          _SETPALETTE
  168.          Wait 10
  169.       End If 
  170.       
  171.       If MZ=29
  172.          Dec _SSPEED
  173.          If _SSPEED<1 : _SSPEED=1 : End If 
  174.          Screen 0
  175.          Shift Down _SSPEED,1,15,1
  176.          Wait 10
  177.       End If 
  178.       
  179.    End If 
  180.    
  181. Loop 
  182.  
  183. ER:
  184. Boom 
  185. Resume RES
  186.  
  187. Procedure _SETUP
  188.  
  189. Auto View Off 
  190. Unpack 10 To 4
  191. Screen Hide 4
  192.  
  193. Screen Open 0,320,256,16,Lowres
  194. Curs Off : Flash Off 
  195. _SETPALETTE
  196. _SETPOINTER
  197. Cls 15
  198.  
  199. Screen Open 1,640,96,8,Hires
  200. Curs Off : Flash Off : Cls 0
  201. Screen Copy 4,0,0,640,96 To 1,0,0
  202. Get Palette 4
  203. _SETPOINTER
  204. _SETSELECTED[0]
  205. _SETFUNCTION[0]
  206. Screen Display 1,,201,,
  207.  
  208. Screen Open 4,320,256,16,Lowres
  209. Curs Off : Flash Off 
  210. _SETPALETTE
  211. _SETPOINTER
  212. Cls 15
  213. Screen Hide 4
  214.  
  215. Limit Mouse 129,43 To 449,291
  216.  
  217. Auto View On 
  218. View 
  219.  
  220. End Proc
  221. Procedure _SETPALETTE
  222.    
  223.    If CSCH=1
  224.        _SETSPREAD[$111,$FFF]
  225.    End If 
  226.    If CSCH=2
  227.        _SETSPREAD[$100,$F00]
  228.    End If 
  229.    If CSCH=3
  230.        _SETSPREAD[$10,$F0]
  231.    End If 
  232.    If CSCH=4
  233.        _SETSPREAD[$1,$F]
  234.    End If 
  235.    If CSCH=5
  236.        _SETSPREAD[$11,$FF]
  237.    End If 
  238.    If CSCH=6
  239.        _SETSPREAD[$101,$F0F]
  240.    End If 
  241.    If CSCH=7
  242.        _SETSPREAD[$110,$FF0]
  243.    End If 
  244.    If CSCH=8
  245.        _SETSPREAD[$101,$FF]
  246.    End If 
  247.    If CSCH=9
  248.        _SETSPREAD[$10,$FF0]
  249.    End If 
  250.  
  251.    
  252. End Proc
  253. Procedure _SETSPREAD[A,B]
  254.    
  255.    If CINV=0
  256.       Colour 1,A
  257.       Colour 15,B
  258.    Else 
  259.       Colour 1,B
  260.       Colour 15,A
  261.    End If 
  262.    
  263.     Extension_20_0006 1 To 15
  264.  
  265. End Proc
  266. Procedure _SETPOINTER
  267.  
  268. For I=17 To 19 : Colour I,$F0 : Next I
  269.  
  270. End Proc
  271.  
  272. Procedure _SETSELECTED[OLD]
  273.  
  274. If OLD=1
  275.   Ink 4
  276.  Else 
  277.   Ink 7
  278. End If 
  279.  
  280. If _SELECTED=1
  281.   Paint 528,26
  282. End If 
  283.  
  284. If _SELECTED=2
  285.   Paint 576,30
  286. End If 
  287.  
  288. If _SELECTED=3
  289.   Paint 540,48
  290. End If 
  291.  
  292. If _SELECTED=4
  293.   Paint 578,49
  294. End If 
  295.  
  296.  
  297. End Proc
  298. Procedure _SETFUNCTION[OLD]
  299.  
  300. If OLD=1
  301.   Ink 4
  302.  Else 
  303.   Ink 7
  304. End If 
  305.  
  306. On _FUNCTION Gosub 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21
  307. Pop Proc
  308.  
  309. 1 Paint 50,27 : Return 
  310. 2 Paint 96,24 : Return 
  311. 3 Paint 178,32 : Return 
  312. 4 Paint 230,30 : Return 
  313. 5 Paint 300,30 : Return 
  314. 6 Paint 370,25 : Return 
  315. 7 Paint 410,27 : Return 
  316.  
  317. 8 Paint 26,46 : Return 
  318. 9 Paint 110,51 : Return 
  319. 10 Paint 178,51 : Return 
  320. 11 Paint 229,48 : Return 
  321. 12 Paint 299,49 : Return 
  322. 13 Paint 374,47 : Return 
  323. 14 Paint 426,47 : Return 
  324.  
  325. 15 Paint 40,77 : Return 
  326. 16 Paint 116,73 : Return 
  327. 17 Paint 170,77 : Return 
  328. 18 Paint 236,77 : Return 
  329. 19 Paint 294,77 : Return 
  330. 20 Paint 370,77 : Return 
  331. 21 Paint 442,74 : Return 
  332.  
  333.  
  334. End Proc
  335.  
  336. Procedure _SETZONES
  337.  
  338. Screen 1
  339. Reserve Zone(30)
  340.  
  341. BB=0
  342.  
  343. For I=0 To 6
  344.  Set Zone I+1,16+BB+(48*I),22 To 64+BB+(48*I),38
  345.  Add BB,16
  346. Next I
  347.  
  348. BB=0
  349.  
  350. For I=0 To 6
  351.  Set Zone 8+I,16+BB+(48*I),43 To 64+BB+(48*I),60
  352.  Add BB,16
  353. Next I
  354.  
  355. BB=0
  356.  
  357. For I=0 To 6
  358.  Set Zone 15+I,16+BB+(48*I),64 To 64+BB+(48*I),81
  359.  Add BB,16
  360. Next I
  361.  
  362. Set Zone 22,504,22 To 554,39
  363. Set Zone 23,570,22 To 618,39
  364. Set Zone 24,506,43 To 554,59
  365. Set Zone 25,570,43 To 618,60
  366.  
  367. Set Zone 26,500,64 To 626,80
  368.  
  369. Set Zone 27,462,22 To 484,38
  370. Set Zone 28,462,44 To 484,59
  371. Set Zone 29,462,65 To 484,81
  372.  
  373. End Proc
  374.  
  375. Procedure _GENERATE
  376.    
  377.    Screen Copy 0 To 4
  378.    
  379.    If _FUNCTION=1 : _COSBLAST : End If 
  380.    If _FUNCTION=2 : _CRISSCROSS : End If 
  381.    If _FUNCTION=3 : _COOLCIRCLES : End If 
  382.    If _FUNCTION=4 : _COOLPATTERN : End If 
  383.    If _FUNCTION=5 : _HUGECIRCLE : End If 
  384.    If _FUNCTION=6 : _SIDEPATTERN : End If 
  385. If _FUNCTION=7 : If _TEST=0 : _WAVY[10,1,3] Else _WAVY[10,4,3] : End If : End If 
  386.    If _FUNCTION=8 : _SPIRAL : End If 
  387.    If _FUNCTION=9 : _COOLSCAPE : End If 
  388.    If _FUNCTION=10 : _COOLTHINGS : End If 
  389.    If _FUNCTION=11 : _COOLTWISTER : End If 
  390.    If _FUNCTION=12 : _COOLGRASS : End If 
  391.    If _FUNCTION=13 : _COOLSPIRAL : End If 
  392.    If _FUNCTION=14 : _COOLDOTS : End If 
  393.    
  394. End Proc
  395.  
  396. Procedure _COSBLAST
  397.    
  398.    Screen 0
  399.    
  400.    Degree 
  401.    
  402.    X=0 : Y=0 : YYY=256 : XX=0 : DEG=1
  403.    
  404.    Repeat 
  405.  
  406.       Inc DEG
  407.       If DEG>360 : DEG=1 : End If 
  408.       Inc X
  409.       If X>319 : X=0 : Inc Y : Inc XX : Inc A : End If 
  410.       
  411.       If _SELECTED=1
  412.          YY#=Hcos(X)-Cos(X)
  413.       End If 
  414.       If _SELECTED=2
  415.          YY#=Hcos(X)-Tan(X)
  416.       End If 
  417.       If _SELECTED=3
  418.          YY#=Hcos(X)-Sin(X)
  419.       End If 
  420.       If _SELECTED=4
  421.          YY#=Hcos(X)
  422.       End If 
  423.       
  424.       If _TEST=0
  425.          C=Point(X,Y+YY#*A)
  426.          If C=1 : C=2 : End If 
  427.          Dec C
  428.       Else 
  429.          C=1
  430.       End If 
  431.       
  432.       If C>-1
  433.           Extension_12_036E X,Y+YY#*A,C
  434.       End If 
  435.       
  436.       If _TEST=0
  437.          C=Point(XX,YYY-YY#*A)
  438.          If C=0 : C=1 : End If 
  439.          Dec C
  440.       Else 
  441.          C=1
  442.       End If 
  443.  
  444.       
  445.       If C>-1
  446.           Extension_12_036E XX,YYY-YY#*A,C
  447.       End If 
  448.       
  449.    Until Mouse Key
  450.    
  451. End Proc
  452. Procedure _CRISSCROSS
  453.  
  454. Screen 0
  455.  
  456. Degree 
  457.  
  458. X=0 : Y=0 : DEG=1
  459.  
  460. Repeat 
  461.    
  462.    Inc DEG
  463.    
  464.    If DEG>360 : DEG=1 : End If 
  465.    Inc X
  466.    
  467.    If X>319 : X=0 : Inc Y : End If 
  468.  
  469.    If _SELECTED=1
  470.     YY#=Cos(DEG)
  471.    End If 
  472.    If _SELECTED=2
  473.     YY#=Tan(DEG)
  474.    End If 
  475.    If _SELECTED=3
  476.     YY#=Sin(DEG)
  477.    End If 
  478.    If _SELECTED=4
  479.     YY#=Hcos(DEG)
  480.    End If 
  481.  
  482. If _TEST=0
  483.    C=Point(X,Y+YY#*X)
  484.    If C=1 : C=2 : End If 
  485.    Ink C-1
  486.   Else 
  487.    Ink 1
  488. End If 
  489.  
  490.    Plot X,Y+YY#*X
  491.    
  492. Until Mouse Key
  493.  
  494. End Proc
  495. Procedure _COOLPATTERN
  496.    
  497.    Screen 0
  498.    
  499.    Degree 
  500.    
  501.    X=0
  502.    Y=0
  503.    DEG=1
  504.    
  505.    Repeat 
  506.       
  507.       Inc DEG
  508.       
  509.       If DEG>360 : DEG=1 : End If 
  510.       Inc X
  511.       
  512.       If X>319 : X=0 : Inc Y : Inc A : End If 
  513.       
  514.       If _SELECTED=1
  515.          YY#=Cos(X)
  516.       End If 
  517.       If _SELECTED=2
  518.          YY#=Tan(X)
  519.       End If 
  520.       If _SELECTED=3
  521.          YY#=Sin(X)
  522.       End If 
  523.       If _SELECTED=4
  524.          YY#=Hcos(X)
  525.       End If 
  526.       
  527.       If _TEST=0
  528.          C=Point(X,Y+YY#*A)
  529.          If C=1 : C=2 : End If 
  530.          Dec C
  531.       Else 
  532.          C=1
  533.       End If 
  534.       
  535.       If C>-1
  536.           Extension_12_036E X,Y+YY#*A,C
  537.       End If 
  538.    Until Mouse Key
  539.    
  540. End Proc
  541. Procedure _COOLCIRCLES
  542.    
  543.    Screen 0
  544.    
  545.    Radian 
  546.    
  547.    Repeat 
  548.       
  549.       HELL:
  550.       
  551.       P=0
  552.       S=0
  553.       N#=0.0
  554.       X=Rnd(300)+15
  555.       Y=Rnd(240)+10
  556.       R=Rnd(1500)+200
  557.       
  558.       For I=1 To R
  559.          
  560.          If Mouse Key : Pop Proc : End If 
  561.          
  562.          N#=N#-0.039
  563.          
  564.          P=P+150
  565.          S=S+1
  566.          
  567.          If _TEST=0
  568.             If _SELECTED=1
  569.                C=Point(N#*Cos(P)+X,N#*Sin(P)+Y)
  570.             End If 
  571.             If _SELECTED=2
  572.                C=Point(N#*Tan(P)+X,N#*Sin(P)+Y)
  573.             End If 
  574.             If _SELECTED=3
  575.                C=Point(N#*Sin(P)+X,N#*Pi#+Y)
  576.             End If 
  577.             If _SELECTED=4
  578.                C=Point(N#*Cos(P)+X,N#*Tan(P)+Y)
  579.             End If 
  580.             If C=1 : C=2 : End If 
  581.             Dec C
  582.          Else 
  583.             C=1
  584.          End If 
  585.          
  586.          If C>-1
  587.            If _SELECTED=1
  588.             Plot N#*Cos(P)+X,N#*Sin(P)+Y,C
  589.            End If 
  590.            If _SELECTED=2
  591.             Plot N#*Tan(P)+X,N#*Sin(P)+Y,C
  592.            End If 
  593.            If _SELECTED=3
  594.             Plot N#*Sin(P)+X,N#*Pi#+Y,C
  595.            End If 
  596.            If _SELECTED=4
  597.             Plot N#*Cos(P)+X,N#*Tan(P)+Y,C
  598.            End If 
  599.          End If 
  600.          
  601.          If S=28
  602.             S=0
  603.          End If 
  604.          
  605.       Next I
  606.       Goto HELL
  607.       
  608.    Until Mouse Key
  609.    
  610. End Proc
  611. Procedure _HUGECIRCLE
  612.    
  613.    Screen 0
  614.    
  615.    Radian 
  616.  
  617.    N#=0.0
  618.    P=0
  619.    S=0
  620.    SA#=0.019
  621.    AAA=0
  622.  
  623.    Repeat 
  624.  
  625.       N#=N#-SA#
  626.       P=P+15
  627.       S=S+1
  628.  
  629.       If _TEST=0
  630.          If _SELECTED=1
  631.             C=Point(N#*Sin(P)+160,N#*Cos(P)+128)
  632.          End If 
  633.          If _SELECTED=2
  634.             C=Point(N#*Tan(P)+160,N#*Cos(P)+128)
  635.          End If 
  636.          If _SELECTED=3
  637.             C=Point(N#*Pi#+160,N#*Sin(P)+128)
  638.          End If 
  639.          If _SELECTED=4
  640.             C=Point(N#*Sin(P)+160,N#*Tan(P)+128)
  641.          End If 
  642.          If C=1 : C=2 : End If 
  643.          Dec C
  644.       Else 
  645.          C=1
  646.       End If 
  647.       
  648.       If C>-1
  649.          If _SELECTED=1
  650.              Extension_12_036E N#*Sin(P)+160,N#*Cos(P)+128,C
  651.          End If 
  652.          If _SELECTED=2
  653.              Extension_12_036E N#*Tan(P)+160,N#*Cos(P)+128,C
  654.          End If 
  655.          If _SELECTED=3
  656.              Extension_12_036E N#*Sin(P)+AAA,N#*Cos(P)+128,C
  657.          End If 
  658.          If _SELECTED=4
  659.              Extension_12_036E N#*Sin(P)+160,N#*Tan(P)+128,C
  660.          End If 
  661.       End If 
  662.       
  663.       If S=28
  664.          S=0
  665.       End If 
  666.  
  667.       Inc AAA
  668.       If AAA>320 : AAA=0 : End If 
  669.  
  670.    Until Mouse Key
  671.    
  672. End Proc
  673. Procedure _SIDEPATTERN
  674.    
  675.    Screen 0
  676.    
  677.    Degree 
  678.    
  679.    A#=-360
  680.    X=0 : Y=20 : YYY=256 : XX=0 : DEG=1
  681.    
  682.    Repeat 
  683.       Inc DEG
  684.       If DEG>360 : DEG=1 : End If 
  685.       Inc X
  686.       If X>319 : X=0 : Inc Y : Inc XX : A#=A#+Pi# : End If 
  687.       
  688.       If _SELECTED=1
  689.          YY#=Hcos(X)-Cos(X)
  690.       End If 
  691.       If _SELECTED=2
  692.          YY#=Hsin(X)-Sin(X)
  693.       End If 
  694.       If _SELECTED=3
  695.          YY#=Htan(X)-Tan(X)
  696.       End If 
  697.       If _SELECTED=4
  698.          YY#=Htan(X)-Cos(X)
  699.       End If 
  700.       
  701.       If _TEST=0
  702.          C=Point(X,Y+YY#*A#)
  703.          If C=1 : C=2 : End If 
  704.          Dec C
  705.       Else 
  706.          C=1
  707.       End If 
  708.       
  709.       If C>0
  710.           Extension_12_036E X,Y+YY#*A#,C
  711.       End If 
  712.       
  713.    Until Mouse Key
  714.    
  715. End Proc
  716. Procedure _WAVY[IN,STE,SPEED]
  717.  
  718.    Degree 
  719.  
  720.    Screen 0
  721.    FF=0
  722.    Repeat 
  723.       For X=0 To 320 Step STE
  724.          If Mouse Key : Pop Proc : End If 
  725.          If _SELECTED=1
  726.            Y#=Cos(X+FF)*IN
  727.          End If 
  728.          If _SELECTED=2
  729.            Y#=Tan(X+FF)*IN
  730.          End If 
  731.          If _SELECTED=3
  732.            Y#=Sin(X+FF)*IN
  733.          End If 
  734.          If _SELECTED=4
  735.            Y#=Hcos(X+FF)*IN
  736.          End If 
  737.          Wait Vbl 
  738.          Screen Copy 0,X,0,X+STE,256 To 0,X,Y#+10
  739.       Next X
  740.     Add FF,SPEED
  741.    Until Mouse Key
  742.  
  743. End Proc
  744. Procedure _SPIRAL
  745.    
  746.    Screen 0
  747.    Degree 
  748.    
  749.    For EFFECT=1 To 50
  750.       
  751.       X=160
  752.       Y=128
  753.       X1=0
  754.       Y1=0
  755.       Screen 0
  756.       
  757.       For T=1 To 20000
  758.          If Mouse Key : Pop Proc : End If 
  759.          If _SELECTED=1
  760.             X1=X+T*Sin(T/EFFECT)/200
  761.             Y1=Y+T*Cos(T/50)/200
  762.          End If 
  763.          If _SELECTED=2
  764.             X1=X+T*Tan(T/EFFECT)/200
  765.             Y1=Y+T*Cos(T/50)/200
  766.          End If 
  767.          If _SELECTED=3
  768.             X1=X+T*Cos(T/EFFECT)/200
  769.             Y1=Y+T*Sin(T/50)/200
  770.          End If 
  771.          If _SELECTED=4
  772.             X1=X+T*Tan(T/EFFECT)/200
  773.             Y1=Y+T*Hcos(T/50)/200
  774.          End If 
  775.          If _TEST=0
  776.             C=Point(X1,Y1)
  777.             If C=1 : C=2 : End If 
  778.             Dec C
  779.          Else 
  780.             C=1
  781.          End If 
  782.          If C>-1
  783.              Extension_12_036E X1,Y1,C
  784.          End If 
  785.       Next T
  786.       
  787.    Next EFFECT
  788.    
  789. End Proc
  790. Procedure _COOLSCAPE
  791.  
  792.    Screen 0
  793.    Radian 
  794.    
  795.    For I=1 To 639 : YBASELINE(I)=0 : Next I
  796.    For I=1 To 639 : YTOPLINE(I)=255 : Next I
  797.    
  798.    XAXIS=320 : YAXIS=127
  799.    
  800.    RHO#=80.0 : D#=750.0
  801.    THETA#=0.4 : S1#=Sin(THETA#) : C1#=Cos(THETA#)
  802.    PHI#=1.25 : S2#=Sin(PHI#) : C2#=Cos(PHI#)
  803.    If _SELECTED=1
  804.       Def Fn Z#(X#)=Cos(0.06*(X#*X#+Y#*Y#))
  805.    End If 
  806.    If _SELECTED=2
  807.       Def Fn Z#(X#)=Sin(0.06*(X#*X#+Y#*Y#))
  808.    End If 
  809.    If _SELECTED=3
  810.       Def Fn Z#(X#)=Tan(0.06*(X#*X#+Y#*Y#))
  811.    End If 
  812.    If _SELECTED=4
  813.       Def Fn Z#(X#)=Cos(0.06*(X#*X#/Y#*Y#))
  814.    End If 
  815.    
  816.    For X#=22.0 To -55.0 Step -0.2
  817.       If Mouse Key : Pop Proc : End If 
  818.       FL=0
  819.       For Y#=-40.0 To 19.0 Step 0.2
  820.          Z#= Fn Z#(X#)
  821.          Gosub PLTER
  822.          If Mouse Key : Pop Proc : End If 
  823.       Next Y#
  824.    Next X#
  825.    
  826.    
  827.    PLTER:
  828.    XE#=(-X#*S1#+Y#*C1#)
  829.    YE#=(-X#*C1#*C2#-Y#*S1#*C2#+Z#*S2#)
  830.    ZE#=(-X#*S2#*C1#-Y#*S2#*S1#-Z#*C2#+RHO#)
  831.    SX=Int(D#*(XE#/ZE#)+XAXIS)
  832.    SY=Int(-D#*(YE#/ZE#)+YAXIS)
  833.    
  834.    If FL=0
  835.       FL=1
  836.       F=0
  837.    Else 
  838.       DX=OLDX-SX
  839.       If DX=0
  840.          DX=1
  841.       End If 
  842.       SL=(OLDY-SY)/DX
  843.       YP=OLDY
  844.       For XP=Int(OLDX)+1 To SX
  845.          FG=1
  846.          YP=YP+SL
  847.          If(XP<0) or(XP>630)
  848.             FG=0
  849.             F=0
  850.             Goto LOP
  851.          End If 
  852.          If(YP<0) or(YP>250)
  853.             FG=0
  854.             F=0
  855.          End If 
  856.          If YP<=YTOPLINE(XP)
  857.             YTOPLINE(XP)=YP
  858.             If FG<>0
  859.                If F=0
  860.                   Gosub MAG
  861.                    Extension_12_036E XP,YP,C
  862.                   F=1
  863.                End If 
  864.                Gosub MAG
  865.                 Extension_12_036E XP,YP,C
  866.             End If 
  867.             If YP=>YBASELINE(XP)
  868.                YBASELINE(XP)=YP
  869.                If FG=0
  870.                   Goto LOP
  871.                End If 
  872.                If F=0
  873.                   F=1
  874.                   Gosub MAG
  875.                    Extension_12_036E XP,YP,C
  876.                End If 
  877.                Gosub MAG
  878.                 Extension_12_036E XP,YP,C
  879.                Goto LOP
  880.             Else 
  881.                Goto LOP
  882.             End If 
  883.          End If 
  884.          If YP>=YBASELINE(XP)
  885.             YBASELINE(XP)=YP
  886.             If FG=0
  887.                Goto LOP
  888.             End If 
  889.             If F=0
  890.                Gosub MAG
  891.                 Extension_12_036E XP,YP,C
  892.                F=1
  893.             End If 
  894.             Gosub MAG
  895.              Extension_12_036E XP,YP,C
  896.             Goto LOP
  897.          End If 
  898.          F=0
  899.          LOP:
  900.       Next XP
  901.    End If 
  902.    
  903.    OLDX=SX : OLDY=SY : Return 
  904.    
  905.    MAG:
  906.    If _TEST=0
  907.       C=Point(XP,YP)
  908.       If C=1 : C=2 : End If 
  909.       Dec C
  910.    Else 
  911.       C=1
  912.    End If 
  913.    
  914.    If C<0 : C=1 : End If 
  915.    
  916.    Return 
  917.    
  918. End Proc
  919. Procedure _COOLDOTS
  920.    
  921.    Screen 0
  922.    
  923.    Repeat 
  924.       R1=Rnd(319)
  925.       R2=Rnd(255)
  926.       If _TEST=0
  927.          C=Point(R1,R2)
  928.          If C=1 : C=2 : End If 
  929.          Dec C
  930.       Else 
  931.          C=1
  932.       End If 
  933.       If C<0 : C=1 : End If 
  934.       Ink C
  935.       If _SELECTED=1
  936.           Extension_12_036E R1,R2,C
  937.       End If 
  938.       If _SELECTED=2
  939.          Bar R1,R2 To R1+2,R2+2
  940.       End If 
  941.       If _SELECTED=3
  942.          Draw R1,R2 To R1+2,R2+2
  943.       End If 
  944.       If _SELECTED=4
  945.          R=Rnd(3)+1
  946.          If R=1
  947.             Circle R1,R2,Rnd(3)+1
  948.          End If 
  949.          If R=2
  950.              Extension_12_036E R1,R2,C
  951.          End If 
  952.          If R=3
  953.             Bar R1,R2 To R1+2,R2+2
  954.          End If 
  955.          If R=4
  956.             Draw R1,R2 To R1+2,R2+2
  957.          End If 
  958.       End If 
  959.    Until Mouse Key
  960.    
  961. End Proc
  962. Procedure _COOLTHINGS
  963.    
  964.    Screen 0
  965.    
  966.    XP=Rnd(625)+10 : YP=Rnd(250)+4
  967.    X=Rnd(625)+10 : Y=Rnd(250)+4
  968.    X2=Rnd(625)+10 : Y2=Rnd(250)+4
  969.    
  970.    Repeat 
  971.       
  972.       _SS=_SELECTED
  973.       If _SELECTED=4
  974.          _SS=Rnd(6)+1
  975.       End If 
  976.       
  977.       _DIR=Rnd(3)+1
  978.       
  979.       If _DIR=1 : Add XP,_SS : End If 
  980.       If _DIR=2 : Add XP,-_SS : End If 
  981.       If _DIR=3 : Add YP,_SS : End If 
  982.       If _DIR=4 : Add YP,-_SS : End If 
  983.       P1=Point(XP,YP)
  984.       If _TEST=0
  985.          Dec P1
  986.          If P1<=1 : P1=2 : End If 
  987.       Else 
  988.          P1=1
  989.       End If 
  990.       If P1<0 : P1=1 : End If 
  991.        Extension_12_036E XP,YP,P1
  992.       If XP<0 or XP>320 or YP<0 or YP>250
  993.          XP=Rnd(300)+10 : YP=Rnd(250)+4
  994.       End If 
  995.       
  996.       _DR=Rnd(3)+1
  997.       If _DR=1 : Add X,_SS : End If 
  998.       If _DR=2 : Add X,-_SS : End If 
  999.       If _DR=3 : Add Y,_SS : End If 
  1000.       If _DR=4 : Add Y,-_SS : End If 
  1001.       If _TEST=0
  1002.          P1=Point(X,Y)
  1003.          Dec P1
  1004.          If P1<=1 : P1=2 : End If 
  1005.       Else 
  1006.          P1=1
  1007.       End If 
  1008.        Extension_12_036E X,Y,P1
  1009.       If X<0 or X>320 or Y<0 or Y>250
  1010.          X=Rnd(300)+10 : Y=Rnd(250)+4
  1011.       End If 
  1012.       
  1013.       _D=Rnd(3)+1
  1014.       If _D=1 : Add X2,_SS : End If 
  1015.       If _D=2 : Add X2,-_SS : End If 
  1016.       If _D=3 : Add Y2,_SS : End If 
  1017.       If _D=4 : Add Y2,-_SS : End If 
  1018.       If _TEST=0
  1019.          P1=Point(X2,Y2)
  1020.          Dec P1
  1021.          If P1<=1 : P1=2 : End If 
  1022.       Else 
  1023.          P1=1
  1024.       End If 
  1025.       If P1<0 : P1=1 : End If 
  1026.        Extension_12_036E X2,Y2,P1
  1027.       If X2<0 or X2>320 or Y2<0 or Y2>250
  1028.          X2=Rnd(300)+10 : Y2=Rnd(250)+4
  1029.       End If 
  1030.       
  1031.    Until Mouse Key
  1032.    
  1033. End Proc
  1034. Procedure _COOLTWISTER
  1035.    
  1036.    Screen 0
  1037.    
  1038.    HEIGHT=60
  1039.    WIDTH=_SELECTED
  1040.    If _SELECTED=4
  1041.     WIDTH=Rnd(20)+3
  1042.    End If 
  1043.    POSITION=128
  1044.    SPEED=1
  1045.    
  1046.    Degree 
  1047.  
  1048. Repeat 
  1049.  
  1050.    Inc G
  1051.    If G>3 : G=1 : End If 
  1052.    
  1053.    For SPRX=319 To -200 Step -SPEED
  1054.       
  1055.       For K=0 To 200 Step 20
  1056.          If G=1 : Y=Cos((SPRX+K)*WIDTH)*HEIGHT+POSITION : End If 
  1057.          If G=2 : Y=Sin((SPRX+K)*WIDTH)*HEIGHT+POSITION : End If 
  1058.          If G=3 : Y=Tan((SPRX+K)*WIDTH)*HEIGHT+POSITION : End If 
  1059.          If _TEST=0
  1060.             C=Point(SPRX,Y)
  1061.             If C<=1 : C=2 : End If 
  1062.             Dec C
  1063.          Else 
  1064.             C=1
  1065.          End If 
  1066.           Extension_12_036E SPRX,Y,C
  1067.          If Mouse Key : Pop Proc : End If 
  1068.       Next K
  1069.       
  1070.    Next SPRX
  1071.  
  1072.    Add HEIGHT,-1
  1073.  
  1074. Until Mouse Key
  1075.    
  1076. End Proc
  1077. Procedure _COOLGRASS
  1078.    
  1079.    Screen 0
  1080.    
  1081.    NPS=100
  1082.    
  1083.    For I=1 To NPS
  1084.       X(I)=I*4
  1085.       Y(I)=0
  1086.    Next I
  1087.    
  1088.    For J=0 To 75
  1089.       Gr Locate X(1),Y(1)
  1090.       For I=1 To NPS
  1091.          If Mouse Key : Pop Proc : End If 
  1092.          R=Rnd(5)+1
  1093.          Add Y(I),R
  1094.          If _SELECTED=4
  1095.             Ink Rnd(14)+1
  1096.             Goto NOB
  1097.          End If 
  1098.          P1=Point(X(I),Y(I))
  1099.          If _TEST=0
  1100.             Dec P1
  1101.             If P1<=1 : P1=2 : End If 
  1102.          Else 
  1103.             P1=1
  1104.          End If 
  1105.          If P1<0 : P1=1 : End If 
  1106.          Ink P1
  1107.          
  1108.          NOB:
  1109.          If _SELECTED=1 or _SELECTED=4
  1110.             For A=1 To 5
  1111.                Draw To X(I),Y(I)+A
  1112.             Next A
  1113.          End If 
  1114.          If _SELECTED=2
  1115.             Plot X(I),Y(I)+A
  1116.          End If 
  1117.          If _SELECTED=3
  1118.             Draw 0,0 To X(I),Y(I)
  1119.          End If 
  1120.       Next I
  1121.    Next J
  1122.    
  1123.    
  1124. End Proc
  1125. Procedure _COOLSPIRAL
  1126.  
  1127.    Screen 0
  1128.  
  1129.    X=160
  1130.    Y=128
  1131.    SR=150
  1132.    ER=_SELECTED
  1133.    AB=1
  1134.    VK=2
  1135.    
  1136.    Degree 
  1137.  
  1138.    A=360/AB
  1139.    L=SR
  1140.  
  1141.    For S=0 To L
  1142.       For W=0 To 359
  1143.          If Mouse Key : Pop Proc : End If 
  1144.          If _SELECTED=1
  1145.             P1=Point(X+SR*Cos(W),Y+SR*Sin(W))
  1146.          End If 
  1147.          If _SELECTED=2
  1148.             P1=Point(X+SR*Tan(W),Y+SR*Sin(W))
  1149.          End If 
  1150.          If _SELECTED=3
  1151.             P1=Point(X+SR*Sin(W),Y+SR*Cos(W))
  1152.          End If 
  1153.          If _SELECTED=4
  1154.             P1=Point(X+SR*Cos(W),Y+SR*Tan(W))
  1155.          End If 
  1156.          If _TEST=0
  1157.             Dec P1
  1158.             If P1<=1 : P1=2 : End If 
  1159.          Else 
  1160.             P1=1
  1161.          End If 
  1162.          If P1<0 : P1=1 : End If 
  1163.          If _SELECTED=1
  1164.              Extension_12_036E X+SR*Cos(W),Y+SR*Sin(W),P1
  1165.          End If 
  1166.          If _SELECTED=2
  1167.              Extension_12_036E X+SR*Tan(W),Y+SR*Sin(W),P1
  1168.          End If 
  1169.          If _SELECTED=3
  1170.              Extension_12_036E X+SR*Sin(W),Y+SR*Cos(W),P1
  1171.          End If 
  1172.          If _SELECTED=4
  1173.              Extension_12_036E X+SR*Cos(W),Y+SR*Tan(W),P1
  1174.          End If 
  1175.          K=W/A*A
  1176.          If K=W Then SR=SR-1
  1177.          If SR<=ER Then S=L
  1178.          If VK=0 Then W=359
  1179.       Next 
  1180.    Next 
  1181.    
  1182. End Proc